Shadow collection, dual-write, incremental backfill, controlled cutover
Re-embedding a multi-billion-point collection is a multi-week project, and zero downtime requires a shadow collection that is populated in parallel with the live one. The pattern is: create the shadow collection with the new model's dimension and metric; dual-write new and updated points to both collections; backfill the existing points into the shadow collection by re-embedding them in batches; monitor progress and validate recall; cut over the query path to the shadow collection via an alias; keep the old collection for rollback. The backfill is the long pole: re-embedding a billion points takes a significant amount of GPU time and Qdrant write throughput, and it must be paced so it does not saturate the resources that the live collection needs. The dual-write ensures that points written during the backfill are present in both collections, and the backfill ensures that the historical points are present in the shadow collection. The cutover is a metadata operation (alias move) and can be rolled back quickly if the new model does not perform as expected.
The mechanism that makes zero downtime possible is that the live and shadow collections are independent, and the query path uses exactly one of them at a time. During the migration, the live collection serves all queries and the shadow collection is being populated. New writes go to both, so the shadow collection does not fall behind. The backfill processes the historical data in batches, which can be paused and resumed. The migration state is always consistent from the query path's perspective: it uses the live collection until the cutover, then the shadow collection. The cutover is atomic at the alias level, and the rollback is the reverse alias move. The main risks are: (1) the dual-write failing silently, so some points are missing from the shadow collection; (2) the backfill not completing before the cutover, so some points are missing; (3) the new model performing worse than the old one, which is why validation before cutover is essential; (4) the cutover causing a performance regression, which is why the shadow collection should be sized and configured to meet the SLO. The validation should include recall against a held-out set, ranking comparison with the old collection, and a load test of the shadow collection at production QPS.
Shadow collection: new dimension and metric, populated in parallel.
Dual-write: new and updated points go to both collections.
Backfill: re-embed historical points in batches, paced to avoid saturating resources.
Progress tracking: know when the backfill is complete before cutover.
Validation: recall against a held-out set, ranking comparison, load test.
Cutover: alias move, atomic and reversible.
Rollback: keep the old collection until the new one is proven.
Monitoring: dual-write success rate, backfill progress, validation metrics.
The trade-off is between the cost of running two collections during the migration and the safety of zero downtime. The shadow collection doubles the storage and the write throughput during the migration, and the backfill consumes GPU and Qdrant write capacity. The alternative - an in-place migration - is not possible because the dimension and metric are immutable, and even if it were, it would cause downtime and mixing of vector spaces. The common mistakes are: (1) cutting over before the backfill is complete; (2) not monitoring the dual-write, so the shadow collection is missing points; (3) not validating the new model's recall before cutover; (4) deleting the old collection immediately after cutover, leaving no rollback; (5) not pacing the backfill, so it saturates the live collection's resources. Version note: the shadow collection pattern is version-independent, but the alias API and the collection creation API have evolved across Qdrant releases. The exact shape of the alias operations and the multi-vector configuration may differ. Verify on your version.
Version-dependent: the alias API, the collection creation API, and the scroll API have evolved across Qdrant releases. The exact shape of the alias operations may differ. Verify on your version.
You need to switch embedding models on a large collection. Explain why you cannot do it in place and what you would do instead.
A teammate cuts over before the backfill is complete. Explain the consequence and how to prevent it.
You are halfway through a billion-point backfill and the live collection's latency is degrading. Diagnose the cause and propose a fix.
You cut over and discover a recall regression. Describe the rollback and the investigation.
Design the full migration plan for a multi-billion-point collection, including the dual-write, backfill pacing, validation, cutover, and rollback.
You need to validate the new model before cutover without affecting the live system. Describe the shadow evaluation.
Derive the timeline for a billion-point migration as a function of embedding throughput, write throughput, and validation time. How would you compress it?
You are designing a system that supports frequent model upgrades (quarterly). Describe the migration infrastructure that makes this routine.